home *** CD-ROM | disk | FTP | other *** search
/ Celestin Apprentice 7 / Apprentice-Release7.iso / Source Code / C / Applications / HexEdit 1.21 / ~Project / Source / HexEdit.h < prev    next >
Encoding:
C/C++ Source or Header  |  1997-08-03  |  8.9 KB  |  261 lines  |  [TEXT/CWIE]

  1. /*********************************************************************
  2.  * HexEdit.h
  3.  *
  4.  * Simple Hex Editor
  5.  * Copyright 1993, Jim Bumgardner
  6.  *
  7.  * Revision History is in History.Note
  8.  *********************************************************************/
  9.  
  10. #include "ObjectWindow.h"
  11. //#include <PrintTraps.h>
  12. #include <stdarg.h>
  13. #include <string.h>
  14.  
  15. #if PROFILE            // 6/15 Optional profiling support
  16. #include <Console.h>
  17. #include <Profile.h>
  18. #endif
  19.  
  20. #define CREATOR            'hDmp'
  21. #define DEFFILETYPE        'TEXT'
  22. #define SBarSize        16
  23. #define    GrowIconSize    14
  24. #define    MainWIND        128
  25. #define MaxFileRAM        32000L
  26. #define SlushRAM        1000L
  27. #define AllocIncr        64L
  28. #define HeaderHeight    20
  29. #define FooterHeight    20
  30. #define TopMargin        3
  31. #define BotMargin        1
  32. #define AddrPos            12
  33. #define HexStart        9
  34. #define AsciiStart        59
  35. #define AsciiSpacing    6
  36. #define LineHeight        11
  37. #define DescendHeight    3
  38. #define CharWidth        6
  39. #define HexWidth        (CharWidth*3)
  40. #define LineNbr(a)        ((a) >> 4)
  41. #define ColNbr(a)        ((a) & 0x0F)
  42. #define CharPos(a)        (((a) << 2) + ((a) << 1))    // Multiply by 6
  43. #define HexPos(a)        (((a) << 4) + ((a) << 1))    // Multiply by 18
  44. #define SaveChangesALRT    10000
  45. #define StdErrorALRT    10001
  46. #define NoForkALRT        10002
  47. #define StdMessageALRT    10003
  48. #define SearchDLOG        128
  49. #define GotoDLOG        129
  50. #define GetFileDLOG        1401
  51. #define MenuBaseID        128
  52. #define UndoSTRs        128
  53. #define MaxWindowWidth    484    // Must be multiple of 2
  54. #define MaxWindowHeight    512    // Note - these are NOT reversed!
  55. #define PrefResType        'prf1'
  56. #define    PrefResID        128
  57.  
  58. enum ChunkTypes        {CT_Original, CT_Work, CT_Unwritten };
  59. enum ForkType         {FT_Data, FT_Resource};
  60. enum ForkModes        {FM_Data, FM_Rsrc, FM_Smart};
  61. enum AsciiModes        {AM_Lo, AM_Hi};
  62. enum EditMode         {EM_Hex, EM_Ascii};
  63. enum EditOperation    {EO_Typing=1, EO_Paste, EO_Insert, EO_Cut, EO_Clear, EO_Delete};
  64. enum ErrorSeverity    {ES_Message, ES_Note, ES_Caution, ES_Stop};
  65. enum CursorNumbers    {C_Arrow, C_Watch, C_IBeam};
  66. enum CompModeSize     {CM_Byte, CM_Word, CM_Long};
  67. enum CompModeType     {CM_Different, CM_Match};
  68.  
  69. //preferences Dialog items
  70. enum CompPref         {CP_Done=1,CP_Cancel,CP_Bytes,CP_Words,CP_Longs,CP_Different,CP_Match};
  71.  
  72.  
  73. // Menu Resource IDs
  74. enum    {AppleMENU = 128, FileMENU, EditMENU, FindMENU, OptionsMENU};
  75.  
  76. // Menu Item Numbers
  77. enum    {AM_About=1};
  78.  
  79. enum    {FM_New=1,FM_Open,FM_Close,    
  80.          FM_Save=5, FM_SaveAs, FM_Revert,
  81.          FM_PageSetup=9, FM_Print,
  82.          FM_Quit = 12};
  83.  
  84. enum     {EM_Undo = 1, EM_Cut = 3, EM_Copy,
  85.          EM_Paste, EM_Clear, EM_SelectAll=8};
  86.          
  87. enum    {SM_Find = 1, SM_FindForward, SM_FindBackward, SM_GotoAddress=5};
  88.  
  89. enum    {OM_HiAscii = 1, OM_DecimalAddr, OM_Overwrite, OM_Backups, OM_Sep1, OM_Compare,
  90.             OM_ComparePref, OM_Sep2, OM_OtherFork};
  91.  
  92.  
  93. typedef struct EditChunk {
  94.     struct EditChunk    **prev,**next;
  95.     Boolean                loaded;            // Flag if chunk is currently loaded
  96.     short                type;            // 0=Orig File, 1=Work File, 2=Unwritten
  97.     Handle                data;            // Handle to Chunk Data
  98.     long                size;            // Size of Chunk
  99.     long                allocSize;        // Size of allocated pointer
  100.     long                addr;            // Start Addr in updated File
  101.     long                filePos;        // Start Addr in actual File
  102.     long                lastCtr;        // Use Counter
  103. } EditChunk;
  104.  
  105. typedef struct {
  106.     ObjectWindowRecord    oWin;            // Window Record
  107.     ControlHandle        vScrollBar;        // Vertical Scroll Bar
  108.     EditChunk            **firstChunk;    // File's First Chunk
  109.     EditChunk            **curChunk;        // File's Current Chunk
  110.     FSSpec                fsSpec,workSpec;// File Specs for Original, Work File
  111.     FSSpec                destSpec;        // File Spec for Save, Save As
  112.     long                fileSize;        // Total File Size
  113.     long                fileType;        // File Type
  114.     long                creator;        // File Creator
  115.     unsigned long        creationDate;    // Creation Date
  116.     long                useCtr;            // Chunk access Counter
  117.                                         // Chunks are unloaded from memory based on usage
  118.     long                totLoaded;        // Amount of bytes in Memory
  119.     long                editOffset;        // Display Offset
  120.     long                startSel;        // First Character of Selection
  121.     long                endSel;            // First Character AFTER Selection
  122.     long                lastTypePos;    // Last Typing Insertion Point
  123.     short                refNum;            // File's Reference Number
  124.     short                workRefNum;        // Work File's Reference Number
  125.     short                workBytesWritten;    // Size of Work File
  126.     short                linesPerPage;    // Lines that fit in the window
  127.     short                editMode;        // 0=Hex, 1=Ascii
  128.     short                fork;            // 0=data 1=resource
  129.     short                lastNybble;        // Last Hex Edit Nibble
  130.     Boolean                loByteFlag;        // Editing Low Byte for Hex Editor
  131.     Boolean                dirtyFlag;        // File has been modified
  132.     BitMap                bitMap;            // Window's BitMap
  133. } EditWindowRecord, *EditWindowPtr;
  134.  
  135. typedef struct {
  136.     short            type;                // Type of operation
  137.     short            reserved;
  138.     long            startSel;            // Start of Selection
  139.     long            endSel;                // End of Selection
  140.     long            fileSize;            // File Size for Undo Op
  141.     EditChunk        **undoScrap;
  142.     EditWindowPtr    window;
  143. } UndoRecord;
  144.  
  145. typedef struct {
  146.     short    asciiMode;
  147.     short    decimalAddr;
  148.     short    backupFlag;
  149.     short    compType;
  150.     short    compSize;
  151.     short    reserved[27];
  152. } Preferences;
  153.  
  154. extern Preferences    gPrefs;
  155. extern UndoRecord    gUndoRec,gRedoRec;
  156. extern EditChunk    **gScrapChunk,**gSearchChunk;
  157. extern Boolean        gQuitFlag,gSys7Flag,gColorQDFlag;
  158. extern MenuHandle    gAppleMenu, gFileMenu, gEditMenu;
  159. extern short        gScrapCount;
  160. extern THPrint        gHPrint;
  161. extern short        gHighChar, gOverwrite;
  162. extern DialogPtr    gSearchWin;
  163. extern short        gSearchDir;
  164. extern Cursor        gWatchCursor,gIBeamCursor;
  165. extern short        gMaxHeight;
  166.  
  167. // High Level Procedures
  168. void HexEditAboutBox( void );
  169. int AskEditWindow(void);
  170. void OpenEditWindow(FSSpec *fsSpec);
  171. void DisposeEditWindow(WindowPtr theWindow);
  172. Boolean CloseEditWindow(WindowPtr theWindow);
  173. Boolean CloseAllEditWindow(WindowPtr theWindow);
  174. void MyIdle(WindowPtr theWindow, EventRecord *er);
  175. void MyDraw(WindowPtr theWin);
  176. void MyProcessKey(WindowPtr theWin, EventRecord *er);
  177. void MyActivate(WindowPtr theWin, Boolean active);
  178. void UpdateOnscreen(WindowPtr theWindow);
  179. void MyHandleClick(WindowPtr theWin, Point where, EventRecord *er);
  180. void DrawPage(EditWindowPtr dWin);
  181. void InvertSelection(EditWindowPtr dWin);
  182. void CursorOn(WindowPtr theWin);
  183. void CursorOff(WindowPtr theWin);
  184. EditWindowPtr LocateEditWindow( FSSpec *fs, short fork );
  185.  
  186. // Chunk Operatations
  187. void LoadFile(EditWindowPtr dWin);
  188. void UnloadFile(EditWindowPtr dWin);
  189. void DisposeChunk(EditWindowPtr dWin, EditChunk **cc);
  190. EditChunk **NewChunk(long size, long addr, long filePos, short type);
  191. EditChunk **AppendChunk(EditChunk **list, EditChunk **chunk);
  192. EditChunk **GetChunkByAddr(EditWindowPtr dWin, long addr);
  193. short GetByte(EditWindowPtr dWin, long addr);
  194. void LoadChunk(EditWindowPtr dWin, EditChunk **cc);
  195. void UnloadLeastUsedChunk(EditWindowPtr dWin);
  196. void UnloadChunk(EditWindowPtr dWin, EditChunk    **cc, Boolean writeFlag);
  197. void RewriteAddressChain(EditChunk **fc);
  198. void SetCurrentChunk(EditWindowPtr dWin, long addr);
  199.  
  200. // Display Operations
  201. void ScrollToSelection(EditWindowPtr dWin, long pos, Boolean forceUpdate, Boolean centerFlag);
  202. void SetupScrollBars(EditWindowPtr dWin);
  203. pascal void MyScrollAction(ControlHandle theControl, short thePart);
  204. Boolean HandleControlClick(WindowPtr theWin, Point where);
  205. void AutoScroll(EditWindowPtr dWin, Point pos);
  206.  
  207. // Edit Operations (high level)
  208. void UndoSelection(EditWindowPtr dWin);
  209. void CopySelection(EditWindowPtr dWin);
  210. void CutSelection(EditWindowPtr dWin);
  211. void PasteSelection(EditWindowPtr dWin);
  212. void ClearSelection(EditWindowPtr dWin);
  213. void CopyOperation(EditWindowPtr dWin, EditChunk ***scrapChunk);
  214. void InitializeEditor(void);
  215. void CleanupEditor(void);
  216. void NewEditWindow(void);
  217. pascal int SourceDLOGHook(short item, DialogPtr theDialog);
  218. Boolean CloseAllEditWindows(void);
  219. void UpdateEditWindows(void);
  220. void DoModelessDialogEvent(EventRecord *theEvent);
  221.  
  222. // Edit Operations (low level)
  223. void PasteOperation(EditWindowPtr dWin, EditChunk **scrapChunk);
  224. void RememberOperation(EditWindowPtr dWin, short opType, UndoRecord *ur);
  225. void DeleteSelection(EditWindowPtr dWin);
  226. void InsertCharacter(EditWindowPtr dWin, short charCode);
  227. void ReleaseEditScrap(EditWindowPtr dWin, EditChunk ***scrap);
  228. Boolean HexConvertScrap(EditWindowPtr dWin, EditChunk **scrapChunk);
  229. void UndoOperation( void );
  230. void HEditScrollToPosition(EditWindowPtr dWin, long newPos);
  231. void AdjustScrollBars(WindowPtr theWin, short resizeFlag);
  232. void GotoAddress(EditWindowPtr dWin);
  233. void PrintWindow(EditWindowPtr dWin);
  234. void PerformTextSearch(EditWindowPtr dWin);
  235.  
  236. // File Operations
  237. void SaveContents(WindowPtr theWin);
  238. void SaveAsContents(WindowPtr theWin);
  239. void RevertContents(WindowPtr theWin);
  240. void InsureNameIsUnique(FSSpec *tSpec);
  241. short MyRandom(short limit);
  242. void OpenSearchDialog(void);
  243. void DoComparePref(void);
  244. void DoCompare(void);
  245.  
  246. short ErrorAlert(short severity, char *str,...);
  247. short OSErrorAlert(short severity, char *str, short oe);
  248.  
  249. // Utility Functions
  250. void MySetUpMenus(void);
  251. void MyHandleMenu (long mSelect);
  252. void SetControl(DialogPtr dial, int item, int value);
  253. void MyAdjustMenus(void);
  254. void MySetCursor(short n);
  255. void MyOutlineButton(DialogPtr dp, int bid, Pattern pat);
  256. void MySimulateButtonPress(DialogPtr dp, int bid);
  257. void SetText(DialogPtr dial, int item, StringPtr text);
  258. void GetText(DialogPtr dial, int item, StringPtr text);
  259. void MyDisableButton(DialogPtr dp, int bid);
  260. void MyEnableButton(DialogPtr dp, int bid);
  261.